﻿using System;
using System.Linq.Expressions;

namespace FluentlyXml.Core.DSL
{
	public interface ITypeDeserializationSpec<T>
	{
		/// <summary> </summary>
		ITypeDeserializationSpec<T> DetermineIdentityBy(Func<T, object> identitySelector);

		/// <summary> </summary>
		ITypeDeserializationSpec<T> Ignore(Expression<Func<T, object>> expression);

		/// <summary> </summary>
		IPropertyDeserializationSpec<T> Deserialize(Expression<Func<T, object>> expression);

		ITypeDeserializationSpec<T> AfterDeserialization(Action<T> callback);
	}
}